package pe.edu.sisclas.controller.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import pe.edu.sisclas.controller.UsuarioController;

/**
 * Servlet Filter implementation class LoginFilter
 */
@WebFilter("/LoginFilter")
public class LoginFilter implements Filter {

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;
		// Se obtiene el bean que almacena al usuario logueado
		UsuarioController usuarioController = (UsuarioController) req
				.getSession().getAttribute("usuarioController");

		// Procesamos la URL requerida por el request
		String url = req.getRequestURL().toString().toLowerCase();

		// Si no requiere protecci�n contin�a la navegaci�n normal
		if (notHide(url)) {
			chain.doFilter(request, response);
			return;
		}

		// El usuario no est� logueado
		if (usuarioController == null || !usuarioController.isLogged()) {
			res.sendRedirect(req.getContextPath() + "");
			return;
		}

		// El recurso requiere protecci�n, pero el usuario ya est� logueado.
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

	private boolean notHide(String url) {
		if (url.endsWith("sisclas/"))
			return true;
		if (url.endsWith("resources/css/main.css"))
			return true;
		if (url.endsWith("logo.jpg"))
			return true;
		if (url.endsWith("sisclas_1.jpg"))
			return true;
		if (url.endsWith("login.jsf"))
			return true;
		if (url.indexOf("/javax.faces.resource/") != -1)
			return true;
		return false;
	}
}
